package com.xqboss.apps.domain.box;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.xqboss.apps.enums.box.BoxSequenceEnum;
import com.xqboss.apps.enums.nft.NftTypeEnum;
import com.xqboss.apps.enums.nft.ResellEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.DecimalMin;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 箱子
 *
 * @author wangcong
 * @date 2023-08-23
 */
@Data
@ApiModel("箱子")
public class Box implements Serializable {

    private static final long serialVersionUID = 1L;


    @TableId
    @ApiModelProperty("箱子id")
    private Long id;

    /**
     * 箱子名称
     */
    @ApiModelProperty("箱子名称")
    private String name;

    /**
     * 标签id
     */
    @ApiModelProperty("标签id")
    private Long categoryId;

    /**
     * 分类id
     */
    @ApiModelProperty("分类id")
    private Long categoryNftId;

    /**
     * 公告id
     */
    private Long announcementId;

    /**
     * 作者id
     */
    @ApiModelProperty("作者id")
    private Long authorId;

    /**
     * 作者名称
     */
    @ApiModelProperty("作者名称")
    private String authorName;

    /**
     * 作者头像
     */
    @ApiModelProperty("作者头像")
    private String authorHeadimg;

    /**
     * 发行方id
     */
    @ApiModelProperty("发行方id")
    private Long publishId;

    /**
     * 发行方名称
     */
    @ApiModelProperty("发行方名称")
    private String publishName;

    /**
     * 发行方头像
     */
    @ApiModelProperty("发行方头像")
    private String publishHeadimg;

    /**
     * 箱子图片
     */
    @ApiModelProperty("箱子图片")
    private String headimg;

    @ApiModelProperty("背景图")
    private String bgimg;

    @ApiModelProperty("历史活动图片")
    private String activityImg;

    /**
     * 发售价格
     */
    @ApiModelProperty("发售价格")
    private BigDecimal price;

    @ApiModelProperty("最低价")
    @DecimalMin(value = "0", message = "最小值为0")
    private BigDecimal lowestPrice;

    @ApiModelProperty("最高价")
    private BigDecimal maxPrice;

    @ApiModelProperty("开箱消耗热豆")
    private BigDecimal openHotBeans;

    /**
     * 转卖开关（0关闭，1开启）
     */
    private ResellEnum isResell;

    @ApiModelProperty("自动开箱（0否，1是）")
    private Boolean autoOpen;

    /**
     * 箱子类型：藏品箱子
     */
    @ApiModelProperty("箱子类型：藏品箱子")
    private NftTypeEnum type;

    /**
     * 开始发售时间
     */
    @ApiModelProperty("开始发售时间")
    private LocalDateTime publishTimeStart;

    /**
     * 结束发售时间
     */
    @ApiModelProperty("结束发售时间")
    private LocalDateTime publishTimeEnd;

    /**
     * 详情
     */
    @ApiModelProperty("详情")
    private String description;

    /**
     * 模拟销量
     */
    @ApiModelProperty("模拟销量")
    private Integer simulatedSales;

    /**
     * 销量
     */
    @ApiModelProperty("销量")
    private Integer sales;

    @ApiModelProperty("优先购销量")
    private Integer prioritySales;

    @ApiModelProperty("外显优先购销量")
    private Integer displayPrioritySales;

    /**
     * 剩余实际库存
     */
    @ApiModelProperty("剩余实际库存")
    private Integer stock;

    @ApiModelProperty("库存总数")
    private Integer totalStock;

    /**
     * 当前订单锁定库存
     */
    @ApiModelProperty("锁定中库存")
    private Integer lockStock;

    /**
     * 外显库存(发售总量)
     */
    @ApiModelProperty("外显库存(发售总量)")
    private Integer displayStock;

    /**
     * 限购数量
     */
    @ApiModelProperty("限购数量")
    private Integer limitStock;

    @ApiModelProperty("单次限购数量")
    private Integer onceLimitStock;

    /**
     * 购买说明
     */
    @ApiModelProperty("购买说明")
    private String buyExplain;

    /**
     * 是否上架
     */
    @ApiModelProperty("是否上架 0否,1是")
    private Integer saleable;

    /**
     * 是否置顶 0否,1是
     */
    @ApiModelProperty("是否置顶 0否,1是")
    private Integer isTop;

    /**
     * 排序
     */
    @ApiModelProperty("排序")
    private Integer sort;

    @ApiModelProperty("1随机发，2顺序发")
    private BoxSequenceEnum sequence;

    /**
     * 冷却时间
     */
    private Integer coolingTime;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private LocalDateTime createTime;

    private LocalDateTime updateTime;

    /**
     * 删除标记
     */
    @TableLogic
    @ApiModelProperty("删除标记")
    private Integer delFlag;

}